/*
import 'package:flutter/material.dart';  这种package后不是跟工程名字的，表示自定义的dart文件
import 'package:xxx/xxx.dart'; 引入Pub仓库pub.dev(或者pub.flutter-io.cn)中的第三方库
import 'dart:xxx'; 引入Dart标准库
import 'xxx' show compute1，compute2 只导入compute1，compute2
import 'xxx' hide compute3 除了compute都引入
import 'xxx' as compute4 将库重命名，当有名字冲突时
library compute5; 定义库名称
part of compute6; 表示文件属于某个

https://www.jianshu.com/p/9cd4b9fb7b44
Flutter中Provider4.0的基本使用  查看index页面模块
1:新建状态管理类
2:全局或者组件内注册状态管理类 提供者
3:状态组件绑定(Consumer嵌套需要响应的组件)  消费者
4:状态变更 (Provider.of<CategoryState>(context, listen: false).xxx();)

https://www.jianshu.com/p/7d4a028529b9
使用AutomaticKeepAliveClientMixin缓存页面
1： 父级body中使用PageView或TabBarView，跳转使用pageController.jumpToPage();
2： State类重写wantKeepAlive为true
3： 子类build需要添加 super.build(context);

//清除编译缓存 flutter clean
//国际化参考
https://blog.csdn.net/u011272795/article/details/108114487
https://www.freesion.com/article/9352481729/


File -> Settings ->Editor ->File and Code Templates ->file 设置即可自动添加注释

*/
import 'package:flutter/material.dart';
import 'router/router.dart';
import 'package:provider/provider.dart';
import 'store/counter.dart';

import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/l10n.dart';

//启动
void main() => runApp(MyApp());

//页面过渡动画，使用主题修改（也可以在路由拦截器跳转统一操作或者跳转的时候调用封装函数）
//如果页面存在TextFormField，第一次打开的时候，动画失效，第二次就正常了。比如login页面？？？

class MyPageTransitionsBuilder extends PageTransitionsBuilder {
  @override
  Widget buildTransitions<T>(
      PageRoute<T> route,
      BuildContext context,
      Animation<double> animation,
      Animation<double> secondaryAnimation,
      Widget child) {
    return SlideTransition(
      position: Tween<Offset>(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
          .animate(
              CurvedAnimation(parent: animation, curve: Curves.fastOutSlowIn)),
      child: child,
    );
  }
}

//初始化配置APP
class MyApp extends StatelessWidget {
  //主题过渡动画函数
  static PageTransitionsBuilder createTransition() {
    //return FadeUpwardsPageTransitionsBuilder();
    // return OpenUpwardsPageTransitionsBuilder();
    // return ZoomPageTransitionsBuilder();
    //调用自定义过渡动画
    return MyPageTransitionsBuilder();
  }

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
        //全局注册 providers 数据
        providers: [ChangeNotifierProvider(create: (context) => Counter())],
        child: MaterialApp(
            title: 'Flutter Demo',
            localizationsDelegates: const [
              S.delegate,
              GlobalMaterialLocalizations.delegate,
              GlobalCupertinoLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate
            ],
            supportedLocales: [
              const Locale('zh', 'CH'),
              const Locale('en', 'US'),
              ...S.delegate.supportedLocales
            ],
            locale: Locale('zh'),
            localeListResolutionCallback: (locales, supportedLocales) {
              print('当前系统语言环境$locales');
              return;
            },
            theme: ThemeData(
              primaryColor: Colors.white,
              pageTransitionsTheme: PageTransitionsTheme(
                builders: <TargetPlatform, PageTransitionsBuilder>{
                  TargetPlatform.iOS: createTransition(),
                  TargetPlatform.android: createTransition(),
                },
              ),
            ),
            initialRoute: "/", // 默认路由
            //routes: routes,  // 注册路由表，routes优先执行，所以必须注释掉，否则onGenerateRoute方法不会调用
            onGenerateRoute: onGenerateRoute, // 路由拦截器
            onUnknownRoute: onUnknownRoute //未知页面，404
            ));
  }
}
